package com.example;

import com.rabbitmq.client.*;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

@SpringBootTest
public class Customer {
    @Test
    void contextLoads() throws IOException, TimeoutException {
        /* 创建连接工厂 */
        ConnectionFactory connectionFactory = new ConnectionFactory();
        /* 创建连接IP */
        connectionFactory.setHost("127.0.0.1");
        /* 创建连接端口号 */
        connectionFactory.setPort(5672);
        /* 创建连接虚拟主机 */
        connectionFactory.setVirtualHost("/ems");
        /* 创建连接用户名和密码 */
        connectionFactory.setUsername("ems");
        connectionFactory.setPassword("123");
        /* 获取连接对象 */
        Connection connection = connectionFactory.newConnection();
        /* 获取连接中的通道 */
        Channel channel= connection.createChannel();
        /**
         * 通道绑定消息队列
         * 参数1:队列名称,如果不存在自动创建
         * 参数2:用来定义队列是否持久化
         * 参数3:是否独占队列
         * 参数4:消费完成后是否删除
         * 参数5:额外参数
         */
        channel.queueDeclare("hello",false,false,false,null);
        /**
         * 参数1:消费哪个队列消息,队列名称
         * 参数2:开启消息自动确认机制
         * 参数3:消费时回调接口
         */
        channel.basicConsume("hello",true,new DefaultConsumer(channel){
            /* 最后一个参数是取出的消息 */
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                System.out.println("得到的消息:"+new String(body));
            }
        });
        /* 关闭连接 */
        channel.close();
        connection.close();
    }
}
